package br.com.grupo7IHC.marketsearch.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import br.com.grupo7IHC.marketsearch.entidades.ListaDeCompras;
import br.com.grupo7IHC.marketsearch.sqlite.DbHelper;

public class ListaDeComprasDao {

	private DbHelper sqliteOpenHelper;

	private String[] columns = { DbHelper.COLUMN_LISTA_ID, DbHelper.COLUMN_LISTA_NOME,
			DbHelper.COLUMN_LISTA_DATA, DbHelper.COLUMN_LISTA_HORA,
			DbHelper.COLUMN_LISTA_ME_AVISAR, DbHelper.COLUMN_LISTA_PRODUTOS };
	private SQLiteDatabase database;

	public ListaDeComprasDao(Context context) {
		sqliteOpenHelper = new DbHelper(context);
	}

	public void open() throws SQLException {
		database = sqliteOpenHelper.getWritableDatabase();
	}

	public void close() {
		sqliteOpenHelper.close();
	}

	public void salvarLista(ListaDeCompras listaDeCompras) {
		System.out.println("foi...");
		open();
		ContentValues values = new ContentValues();
		values.put(DbHelper.COLUMN_LISTA_NOME, listaDeCompras.getNome());
		values.put(DbHelper.COLUMN_LISTA_DATA, listaDeCompras.getData());
		values.put(DbHelper.COLUMN_LISTA_HORA, listaDeCompras.getHora());
		values.put(DbHelper.COLUMN_LISTA_ME_AVISAR, listaDeCompras.getMeAvisar());
		String listaDeProdutos = convertArrayToString(listaDeCompras.getProdutoID());
		values.put(DbHelper.COLUMN_LISTA_PRODUTOS, listaDeProdutos);
		long insertId = database.insert(DbHelper.TABLE_LISTA_DE_COMPRAS, null,
				values);
		close();
	}

	public void editarLista(ListaDeCompras listaDeCompras) {
		open();
		ContentValues values = new ContentValues();
		values.put(DbHelper.COLUMN_LISTA_NOME, listaDeCompras.getNome());
		values.put(DbHelper.COLUMN_LISTA_DATA, listaDeCompras.getData());
		values.put(DbHelper.COLUMN_LISTA_HORA, listaDeCompras.getHora());
		values.put(DbHelper.COLUMN_LISTA_ME_AVISAR, listaDeCompras.getMeAvisar());
		String listaDeProdutos = convertArrayToString(listaDeCompras.getProdutoID());
		values.put(DbHelper.COLUMN_LISTA_PRODUTOS, listaDeProdutos);
		database.update(DbHelper.TABLE_LISTA_DE_COMPRAS, values,
				DbHelper.COLUMN_LISTA_ID + " = ?",
				new String[] { String.valueOf(listaDeCompras.getId()) });
		close();

	}

	public void removeLista(ListaDeCompras listaDeCompras) {
		open();
		database.delete(DbHelper.TABLE_LISTA_DE_COMPRAS, DbHelper.COLUMN_LISTA_ID
				+ " = ?",
				new String[] { String.valueOf(listaDeCompras.getId()) });
		close();
	}

	public List<ListaDeCompras> getAllLista() {
		open();
		List<ListaDeCompras> listaList = new ArrayList<ListaDeCompras>();
		// Select All Query
		String selectQuery = "SELECT  * FROM "
				+ DbHelper.TABLE_LISTA_DE_COMPRAS;

		Cursor cursor = database.rawQuery(selectQuery, null);

		if (cursor.moveToFirst()) {
			do {
				ListaDeCompras listaDeCompras = new ListaDeCompras();
				listaDeCompras.setId(cursor.getLong(0));
				listaDeCompras.setNome(cursor.getString(1));
				listaDeCompras.setData(cursor.getString(2));
				listaDeCompras.setHora(cursor.getString(3));
				listaDeCompras.setMeAvisar(cursor.getString(4));
				String[] listaDeProdutos = convertStringToArray(cursor.getString(5));
				listaDeCompras.setProdutoID(listaDeProdutos);
				// Adding Contato to list
				listaList.add(listaDeCompras);
			} while (cursor.moveToNext());
		}
		close();
		return listaList;
	}

	public ListaDeCompras getLitaPorId(long id) {
		SQLiteDatabase database = sqliteOpenHelper.getReadableDatabase();

		Cursor cursor = database.query(DbHelper.TABLE_LISTA_DE_COMPRAS, new String[] {
				DbHelper.COLUMN_LISTA_ID, DbHelper.COLUMN_LISTA_NOME,
				DbHelper.COLUMN_LISTA_DATA, DbHelper.COLUMN_LISTA_HORA,
				DbHelper.COLUMN_LISTA_ME_AVISAR }, DbHelper.COLUMN_LISTA_ID + "=?",
				new String[] { String.valueOf(id) }, null, null, null, null);
		if (cursor != null)
			cursor.moveToFirst();

		ListaDeCompras listaDeCompras = new ListaDeCompras();
		listaDeCompras.setId(cursor.getLong(0));
		listaDeCompras.setNome(cursor.getString(1));
		listaDeCompras.setData(cursor.getString(2));
		listaDeCompras.setHora(cursor.getString(3));
		listaDeCompras.setMeAvisar(cursor.getString(4));
		String[] listaDeProdutos = convertStringToArray(cursor.getString(5));
		listaDeCompras.setProdutoID(listaDeProdutos);
		return listaDeCompras;
	}
	
	public static String strSeparator = "__,__";
	public static String convertArrayToString(String[] array){
	    String str = "";
	    for (int i = 0;i<array.length; i++) {
	        str = str+array[i];
	        // Do not append comma at the end of last element
	        if(i<array.length-1){
	            str = str+strSeparator;
	        }
	    }
	    return str;
	}
	public static String[] convertStringToArray(String str){
	    String[] arr = str.split(strSeparator);
	    return arr;
	}
}
